﻿using System.Linq;

namespace LOGIC
{
    ///Logisk klass som hanterar användarna (personalen)
    public class LogicStaff
    {
        private DB.Personal activeUser;

        public LogicStaff()
        { 
        }

        public bool LogIn(int ID, string password)
        {
            return LogicSession.TheSession.LogIn(ID, password);
        }

        private LogicStaff(DB.Personal personalObject)
        {
            this.activeUser = personalObject;
        }

        private LogicSession session;

        public LogicStaff(LogicSession session)
        {
            this.session = session;
        }

        //Get-metoder
        #region

        public string Behörighet
        {
            get { return activeUser.behörighet; }
        }

        public int PersonalId
        {
            get { return activeUser.personalID; }
        }

        public string Förnamn
        {
            get { return activeUser.förnamn; }
        }

        public string Efternamn
        {
            get { return activeUser.efternamn; }
        }

        public string Lösenord
        {
            get { return activeUser.lösenord; }
        }
        #endregion

        /// <summary>
        /// Metod ändrar en befintlig användares uppgifter
        /// </summary>
        /// <param name="tempId">Användarens personalId(kan ej ändras)</param>
        /// <param name="tempFName">Användarens förnamn</param>
        /// <param name="tempLName">Användarens efternamn</param>
        /// <param name="tempAccess">Användarens behörighetsnivå</param>
        /// <param name="tempPassword">Användarens lösenord</param>
        public static void ChangedStaff(int tempId, string tempFName, string tempLName, string tempAccess, string tempPassword)
        {
            LogicSession.TheSession.Db.ChangedStaff(tempId, tempFName, tempLName, tempAccess, tempPassword);
        }

        /// <summary>
        /// Metod som skapar en ny användare
        /// </summary>
        /// <param name="tempFName">Användarens förnamn</param>
        /// <param name="tempLName">Användarens efternamn</param>
        /// <param name="tempAccess">Användarens behörighetsnivå</param>
        /// <param name="tempPassword">Användarens lösenord</param>
        /// <returns></returns>
        public static LogicStaff NewStaff(string tempFName, string tempLName, string tempAccess, string tempPassword)
        {
            return new LogicStaff(LogicSession.TheSession.Db.NewStaff(tempFName, tempLName, tempAccess, tempPassword));
        }

        /// <summary>
        /// Metod som kontrollerar användarens behörighetsnivå vid inloggning för att öppna rätt fönster och sötta begränsningar
        /// </summary>
        /// <param name="tempId">Användarens personalId</param>
        /// <returns></returns>
        public static LogicStaff CheckLevel(int tempId)
        {
            return new LogicStaff(LogicSession.TheSession.Db.CheckLevel(tempId));
        }

        /// <summary>
        /// Metod som hämtar alla användare och visar i tabellen i administrationen
        /// </summary>
        /// <returns></returns>
        public IQueryable GetaAllStaff()
        {
            return LogicSession.TheSession.Db.GetAllStaff();
        }

        /// <summary>
        /// Metod som söker ut användare på personalId
        /// </summary>
        /// <param name="tempId">Användarens personalId</param>
        /// <returns></returns>
        public IQueryable GetStaffById(int tempId)
        {
            return LogicSession.TheSession.Db.GetStaffById(tempId);
        }

        /// <summary>
        /// Metod som söker ut användare på förnamn
        /// </summary>
        /// <param name="tempFName">Användarens förnamn</param>
        /// <returns></returns>
        public IQueryable GetStaffByFName(string tempFName)
        {
            return LogicSession.TheSession.Db.GetStaffByFName(tempFName);
        }

        /// <summary>
        /// Metod som söker ut användare på efternamn
        /// </summary>
        /// <param name="tempLName">Användarens efternamn</param>
        /// <returns></returns>
        public IQueryable GetStaffByLName(string tempLName)
        {
            return LogicSession.TheSession.Db.GetStaffByLName(tempLName);
        }

        /// <summary>
        /// Metod som hämtar in ett nytt personalId vid skapande av ny användare.
        /// </summary>
        /// <returns>Nytt personalId</returns>
        public int GetStaffId()
        {
            return LogicSession.TheSession.Db.GetStaffNr();
        }


    }
}
